import { ElMessage } from "element-plus";
import cryptoTools from "@/utils/crypto";

export const mixinDefaultConfig = config => {
	let defaultConfig = {
		noLoading: false, // 是否显示loading
		encrypt: true, // 是否加密,默认加密
		sendOriginalData: false, // 是否发送原始数据,默认不发送
		failShowNotification: true, // 是否显示错误通知,默认显示
		failShowMessage: false // 是否显示错误信息,默认显示
	};
	Object.assign(defaultConfig, config.config);
	return defaultConfig;
};

/**
 * @description: 校验网络请求状态码
 * @param {Number} status
 * @return void
 */
export const checkStatus = status => {
	switch (status) {
		case 400:
			ElMessage.error("请求失败！请您稍后重试");
			break;
		case 401:
			ElMessage.error("登录失效！请您重新登录");
			break;
		case 403:
			ElMessage.error("当前账号无权限访问！");
			break;
		case 404:
			ElMessage.error("你所访问的资源不存在！");
			break;
		case 405:
			ElMessage.error("请求方式错误！请您稍后重试");
			break;
		case 408:
			ElMessage.error("请求超时！请您稍后重试");
			break;
		case 500:
			ElMessage.error("服务异常！");
			break;
		case 502:
			ElMessage.error("网关错误！");
			break;
		case 503:
			ElMessage.error("服务不可用！");
			break;
		case 504:
			ElMessage.error("网关超时！");
			break;
		default:
			ElMessage.error("请求失败！");
	}
};

/**
 * @description: 处理请求前的数据加密
 * @param config
 */
export const cryptoInterceptorsRequest = config => {
	const encrypt_key = import.meta.env.VITE_ENCRYPT_KEY;
	const iv = import.meta.env.VITE_IV;
	config?.config?.encrypt && (config.headers["Request-Data"] = cryptoTools.encrypt(JSON.stringify(config.data || config.params), encrypt_key, iv));
	if (!config.config.sendOriginalData) config.data = undefined;
	return config;
};
